package com.cloud.charts4a.data;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * Chart Data Series<p/>
 *
 * @param <E> subclass of AbstractChartData class
 * 
 * @version
 * <ol>
 * 	<li>2010/07/09 CloudTu：First Release</li>
 * </ol>
 * 
 * @author cloudtu 
 */
public class ChartDataSeries<E extends AbstractChartData<E>> {
	private String name;
	private int color;
	private List<E> container = new ArrayList<E>();
	private float minYValueInAllData = Integer.MAX_VALUE;	//所有Y軸量測資料中的最小值
	private float maxYValueInAllData = Integer.MIN_VALUE;	//所有Y軸量測資料中的最大值
			
	/**
	 * Chart Data Series
	 * 
	 * @param name		Name	
	 * @param color		Color
	 */
	public ChartDataSeries(String name,int color) {
		this.name = name;
		this.color = color;
	}

	/**
	 * Add ChartData to this series
	 * 
	 * @param date		Date
	 * @param value		Value
	 */
	public void addChartData(E chartData){
		container.add(chartData);
		
		if(chartData.getYValue() < minYValueInAllData){
			minYValueInAllData = chartData.getYValue();
		}
		
		if(chartData.getYValue() > maxYValueInAllData){
			maxYValueInAllData = chartData.getYValue();
		}		
	}
	
	/**
	 * Get size
	 * 
	 * @return	size
	 */
	public int size(){
		return container.size();
	}
	
	/**
	 * Get ChartData in this series
	 * 
	 * @param dataIndex dataIndex in this series
	 * 
	 * @return	ChartData
	 */
	public E getChartData(int dataIndex){
		return container.get(dataIndex);
	}
	
	/**
	 * Sort all data in this series
	 */
	public void sort(){
		Collections.sort(container);
	}

	/**
	 * Get color
	 * 
	 * @return	color
	 */
	public int getColor() {
		return color;
	}

	/**
	 * Get name
	 * 
	 * @return name
	 */
	public String getName() {
		return name;
	}

	/**
	 * 取得所有量測資料中的最小值
	 * 
	 * @return 	所有量測資料中的最小值
	 */
	public float getMinYValueInAllData() {
		return minYValueInAllData;
	}

	/**
	 * 取得所有量測資料中的最大值
	 * 
	 * @return 所有量測資料中的最大值
	 */
	public float getMaxYValueInAllData() {
		return maxYValueInAllData;
	}				
}
